package map;

import jdk.internal.org.objectweb.asm.Handle;

import java.util.HashMap;
import java.util.Map;

/**
 * java.util.Map接口 查找表
 * Map时常用的一种结构 ,它体现的样子是一个多行两列的表格 其中左列称为key 右列称为value
 * Map要求key不允许重复,并且总是根据key获取对应的value
 *
 * 常见实现类
 * java.util.HashMap,使用散列算法实现的Map,称为散列表,当今查询速度最快的数据结构
 */

public class MapDemo1 {
    public static void main(String[] args) {
        Map<String,Integer>map=new HashMap<>();
        /*
        V put(K k V v)
        向Map中添加一组键值对,由于Map要求key不可以重复,所以若使用已有key存放
        元素时为替换value操作,此时put方法返回值就是被替换的value,否则为null
         */
        map.put("数学", 99);
        map.put("语文", 99);
        map.put("英语", 99);
        map.put("化学", 99);
        map.put("物理", 99);
        System.out.println(map);
        //替换数学对应的的值,并将其返回
        Integer value = map.put("数学", 66);
        System.out.println(map);
        System.out.println(value);
        /*
        V get(K k)
        根据给定的key获取对应的value.如果给定的kay不存在则返回值为null
         */
        value = map.get("语文");
        System.out.println("语文:" + value);

        int size = map.size();
        System.out.println("size:" + size);

        /*
        V remove(K k)
        删除给定的key所对应的这组键值对,返回值为这个key对应的value
         */
        value = map.remove("数学");
        System.out.println(map);
        System.out.println(value);
        /*
          boolean containsKey(K k);
          判断当前Map是否包含给定的key

          boolean containsKey(V v);
          判断当前Map是否包含给定的value


         */
        boolean ck = map.containsKey("英语");
        System.out.println("包含key:" + ck);
        boolean cv = map.containsValue("97");
        System.out.println("包含value:" + cv);
        /*
        如果map的value是包装类类型,则获取时要用包装类接受,避免使用基本类型接受
        由于基本类型会引发自动拆箱,而Map返回时若给定的key不存在为null便引发
        空指针异常
         */
//        int v=map.get("体育");
        value=map.get("体育");
        System.out.println(value);
    }
}
